package com.bo.impl;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.bean.Rol;
import com.bean.Usuario;
import com.bo.RegistroBo;
import com.dao.RecursosDao;
import com.dao.RegistroDao;

@Service("UsuarioBo")
public class UsuarioBo implements RegistroBo{
	Logger log	= Logger.getLogger(UsuarioBo.class);
	
	@Autowired
	@Qualifier("UsuarioDaoImpl")
	private RegistroDao usuarioDao;
	
	@Autowired
	@Qualifier("RolDaoImpl")
	private RecursosDao rolDao;

	@Override
	@Transactional(readOnly = true)
	public boolean agregaRegistro(Object registro) {
		log.debug("begin");
		Usuario usuario	= (Usuario) registro;
		log.debug("ROL:"+usuario.getRol());
		if (usuario.getRol() == null ){ 
			Rol rol	= new Rol();
			rol.setRol("user");
			Rol resultRol	= (Rol) rolDao.buscaRegistroPorId(rol);
			log.debug("busqueda --> ROL:"+resultRol.getRol()+", descripcion: "+resultRol.getDescripcionRol());
			if (resultRol != null){
				usuario.setRol(resultRol);
			}
		}		
		boolean result	= usuarioDao.agregaRegistro(usuario);
		log.debug("finally");
		return result;
	}

	@Override
	public boolean eliminaRegistro(Object registro) {
		log.debug("begin");
		Usuario usuario	= (Usuario) registro;
		usuario.setRol(null);
		boolean result	= usuarioDao.eliminaRegistro(registro);
		log.debug("finally");
		return result;
	}

	@Override
	public void modificaRegistro(Object registro) {
		log.debug("begin");
		usuarioDao.modificaRegistro(registro);
		log.debug("finally");
	}

	@SuppressWarnings("unchecked")
	@Override
	public <T> List<T> listaDeRegistros() {
		log.debug("begin");
		List<Usuario> result	= new ArrayList<Usuario>();
		result	= usuarioDao.listaDeRegistros();	
		log.debug("finally");
		return (List<T>) result;
	}

	@Override
	public Object buscaRegistroPorParametro(String parametro,
			Object registro) {
		log.debug("begin");
		Usuario usuario	= (Usuario) registro;
		log.debug("Hacer busqueda por parametro: "+parametro+" con valor de: "+usuario.getEmail());
		Usuario result	= (Usuario) usuarioDao.buscaRegistroPorParametro(parametro, usuario);
		log.debug("Usuario resutado de la busqueda: "+result);	
		if ( result != null){
			log.debug("finally -IF-");
			return result;
		}
		log.debug("finally");
		return null;
	} 
}
